module firecracker_d.models.instance_info;
import asdf;
import firecracker_d.models.base_model;

struct InstanceInfo {
	mixin BaseModel;

	/***
	*  Possible states that our microVM could be in
	***/
	enum InstanceState : string {
		Uninitialized = "Uninitialized",
		Starting = "Starting",
		Running = "Running",
	}

    /***
    * Application name (?)
    ***/
    @serializationKeys("app_name") string appName;

	/***
	* ID of our current microVM
	***/
	@serializationKeys("id") string id;

	/***
	* State of our current microVM
	***/
	@serializationKeys("state") InstanceState state;

    /***
    * MicroVM hypervisor version
    ***/
    @serializationKeys("vmm_version") string vmmVersion;

	/***
	* Get the microVM's state via the Firecracker API. 
    * Throws: FirecrackerException on error.
	***/
	this(FirecrackerAPIClient cl) {
		Response r = cl.get("/");

		if(r.code == 200) {
			InstanceInfo k = r.responseBody.toString.deserialize!InstanceInfo();
			this = k;
		}
		else {
			throwFromResponse(r);
		}
	}

}